From ceeaf183a11f2abfc487d6381718a2707e65f41d Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 18 Jan 2011 23:01:16 -0500 Subject: [PATCH] Add a packing example to the tutorial --- docs/reference/gtk/getting_started.xml | 31 +++++++++ docs/reference/gtk/images/grid-packing.png | Bin 0 -> 4612 bytes examples/Makefile.am | 2 +- examples/grid-packing.c | 73 +++++++++++++++++++++ 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 docs/reference/gtk/images/grid-packing.png create mode 100644 examples/grid-packing.c diff --git a/docs/reference/gtk/getting_started.xml b/docs/reference/gtk/getting_started.xml index 3698aa5e90..aebc5ee42f 100644 --- a/docs/reference/gtk/getting_started.xml +++ b/docs/reference/gtk/getting_started.xml @@ -116,4 +116,35 @@ +
+ Packing + + When creating an application, you'll want to put more than one widget + inside a window. Our first helloworld example only used one widget so we + could simply use a gtk_container_add() call to "pack" the widget into the + window. But when you want to put more than one widget into a window, it + it becomes important to control how each widget is positioned and sized. + This is where packing comes in. + + GTK+ comes with a large variety of layout containers + whose purpose it is to control the layout of the child widgets that are + added to them. See for an overview. + + The following example shows how the GtkGrid container lets you + arrange several buttons: + + + + + + + Packing buttons + + + FIXME: MISSING XINCLUDE CONTENT + + + +
+ diff --git a/docs/reference/gtk/images/grid-packing.png b/docs/reference/gtk/images/grid-packing.png new file mode 100644 index 0000000000000000000000000000000000000000..3dec7d5fcd4d30eb2f6c7021c0d8ed8bf976d4da GIT binary patch literal 4612 zcmZvAcTf{f&~~H<1W`bwO9WJkKj}rJ7lF`ALPtcZfl!1lhGbq?Pr7QUvQ&c1&3FP#7`9-eTghdvH3ot!*;Ts?hv zD7%yZ0H!RkhAPBAZ#zH0-xNCEr`&wrSzcCF#v%xxaeN5Wp>|^e3i1K3EskvLc8-W$ z+b!g^u-*pQXRV^E@(mPpJgE8(BDypxntXtVyRdbz5+UfVyz`Likt@-JiOite|Hs+ zhcZ>Z(e6}GIq5HPkQzy&oZYa5$FMcv>W`dJK#I8u9yoJTs=TE=&gx12leyMM@=RMh zt0}D$eGJr56oPnXMEKS8HCCuq!_Dv`ArV~hO5i>8_3cL2^8z~XBwh%WJ;>xsKZw1; z9=PzRLbj4VOiP;^pi}0WJAXaH23KBD6|vR5kS-NS;hj%0JWKkDH#vTNF1JUyLwTov zbb=T0?i0#n|Bx-iv>;C%um8dFCp?y*%uRJiq+Bweznh`FEib(<#|L?ZUG72zwYqKv zrj9<|;S)dQ{Tvbe-}s+Z8=jfyE&*Qgx7Uw2lgjB+%zfV!jyFj+7&A~$WL7FSx%M3t zqMnbv$}%#s8p-?-EL@4jdPKz`K0K;JNZG<05@7x` zH+gP5O&KUJkVM<0`IGV$bTx{&>U)pw^L=5n3}d?mZSH?iv*`7Tr%!a9`PPgv&T?~O zWB24}X)E(NKo|z|_VK}^{6fm=pd5_{RxV57(^DqvriH&{gCzCGInsTbEn8u5b2gX2 zzP@jDZ?1(c)ZE%D-15dF%U zBdc(Ui;cPdeCUwq;!6W1;9CmO8#jJ-BlxSU2L)e%{;>X5PrI8K#Y=#O27asPZI|tG zPfK3&?fOds(3juno9lj?iQ(Wp$nWycxo4R8aiQ;xwET7E3B{?R8kymOGnX4Uho$tt z{hfWcFi*8H5Uhj%SX&!w2l=~RGe)3$_`}I))QW|Lb)wQIthY4ix~-%66wc;h)t3RV zn#ok^w-SEie7^oi{u(}km%rL>YV`B5PnPhvy&tJVobcwGUSfU(KSo?zz9_3ajM@Ep z8lArD<+JoLwvr`_cztdLn=qAJ@o*ZR*C}V~XU^8HXhVB^@|-kjU!^w;$oN{At6kg0 z*0Tz=84xXTlkIMu&E_`FzblZUqDBFZjf}i2oefFv)#%7dL)rDOfGGhL*wlmhk?z9{ zCS4;q)9Ezu%J2pQ2cGBB$1pt@&PeA|+4{SY8hBirooocYCYH zJ@s}a@?452^BR#sk8EhF?CeQ9IW`VfH}H>srZ}h*7pJTJ8$_pK@Cm_MO^Ck>ZdVeB zjbU7f%77OoV)e&s7PJBuM{+n=ou|X`emk*+(wkodPJT5kI z+(qrtt7A@Rqru_k1Z7w}(g!g$ExaKpEac!d8V=x=LnR}VL4r&DISRK+X0Zvg@Xo

xbl2sh6{LIES^5unf!|1xMIU}BCTT+q4pTxV6u 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 + +static void +print_hello (GtkWidget *widget, + gpointer data) +{ + g_print ("Hello World\n"); +} + +int +main (int argc, + char *argv[]) +{ + GtkWidget *window; + GtkWidget *grid; + GtkWidget *button; + + /* This is called in all GTK applications. Arguments are parsed + * from the command line and are returned to the application. + */ + gtk_init (&argc, &argv); + + /* create a new window, and set its title */ + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (window), "Grid"); + g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); + gtk_container_set_border_width (GTK_CONTAINER (window), 10); + + /* Here we construct the container that is going pack our buttons */ + grid = gtk_grid_new (); + + /* Pack the container in the window */ + gtk_container_add (GTK_CONTAINER (window), grid); + + button = gtk_button_new_with_label ("Button 1"); + g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL); + + /* Place the first button in the grid cell (0, 0), and make it fill + * just 1 cell horizontally and vertically (ie no spanning) + */ + gtk_grid_attach (GTK_GRID (grid), button, 0, 0, 1, 1); + + button = gtk_button_new_with_label ("Button 2"); + g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL); + + /* Place the second button in the grid cell (1, 0), and make it fill + * just 1 cell horizontally and vertically (ie no spanning) + */ + gtk_grid_attach (GTK_GRID (grid), button, 1, 0, 1, 1); + + button = gtk_button_new_with_label ("Quit"); + g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL); + + /* Place the Quit button in the grid cell (0, 1), and make it + * span 2 columns. + */ + gtk_grid_attach (GTK_GRID (grid), button, 0, 1, 2, 1); + + /* Now that we are done packing our widgets, we show them all + * in one go, by calling gtk_widget_show_all() on the window. + * This call recursively calls gtk_widget_show() on all widgets + * that are contained in the window, directly or indirectly. + */ + gtk_widget_show_all (window); + + /* All GTK applications must have a gtk_main(). Control ends here + * and waits for an event to occur (like a key press or a mouse event), + * until gtk_main_quit() is called. + */ + gtk_main (); + + return 0; +} -- 2.30.2